package com.atguigu.mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.time.LocalDateTime;

@Data

/**
 * @TableName 可以将实体类名 映射 到形式不一样的数据库表名
 */
@TableName(value = "t_user")
//@TableName("t_user")
public class User {

    /**
     * @TableId(type = IdType.ASSIGN_ID) 默认值是ASSIGN_ID
     * 雪花算法 分布式主键生成算法
     * 在Mybatisplus中默认设置
     */
//    @TableId(type = IdType.ASSIGN_ID)
    /**
     * 因为MP默认认为id是主键列，其他名字的属性MP无法默认自动填充
     * 为主键列添加 @TableId 注解，告诉MP uid才是ID
     */
//    @TableId
//    private Long uid;
    /**
     * 使用 value 属性将属性名映射到列名
     * type属性用来定义主键策略
     * type = IdType.AUTO  使用数据库的自增策略，也可在全局配置
     */

    @TableId(value = "uid")
    private Long id;

    @TableField(value = "username")
    private String name;

    @TableField(fill = FieldFill.INSERT)
    private Integer age;

    private String email;

    /** 自动填充
     * 阿里巴巴的开发手册中建议每个数据库表必须要有create_time 和 update_time字段，
     * 我们可以使用 自动填充 功能维护这两个字段
     * step1：添加fill属性
     * step2：实现 元对象处理器接口 -> 创建handler包，创建MyMetaObjectHandler类
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * Integer 和 Boolean 都可，规范中要求不要写成isDeleted，某些框架会产生歧义
     */
    @TableLogic
    @TableField(value = "is_deleted")
    private Boolean deleted;    //0 未删除；1 已删除

//    @TableLogic
//    @TableField(value = "is_deleted")
//    private Integer deleted;    //1 未删除；-1 已删除
    //可在properties文件中配置

}
